package com.halfsword.creativecraft.block.custom.machine.blockentity.modules;

import com.halfsword.creativecraft.modules.interfaces.IDataSyncFacet;
import com.halfsword.creativecraft.utils.ContainerDataBuilder;
import com.halfsword.creativecraft.utils.ContainerDataReader;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;

import java.util.ArrayList;
import java.util.List;

/**
 * 数据同步模块实现
 * 负责整合和管理所有模块的数据同步
 */
public class DataSyncModule implements IDataSyncFacet {

    private final String moduleId;
    private final List<IDataSyncFacet> syncModules;
    private boolean isDirty = false;

    public DataSyncModule(String moduleId) {
        this.moduleId = moduleId;
        this.syncModules = new ArrayList<>();
    }

    @Override
    public String getModuleId() {
        return moduleId;
    }

    @Override
    public void tick(Level level, BlockPos pos, BlockState state) {
        // 数据同步模块的tick逻辑
        // 可以在这里检查所有模块的数据同步状态
        for (IDataSyncFacet module : syncModules) {
            if (module.isDataDirty()) {
                markDataDirty();
                module.clearDataDirty();
            }
        }
    }

    @Override
    public void populateContainerData(ContainerDataBuilder builder) {
        // 收集所有模块的数据
        for (IDataSyncFacet module : syncModules) {
            module.populateContainerData(builder);
        }
    }

    @Override
    public void readFromContainerData(ContainerDataReader reader) {
        // 分发数据到所有模块
        for (IDataSyncFacet module : syncModules) {
            module.readFromContainerData(reader);
        }
    }

    @Override
    public int getDataFieldCount() {
        int count = 0;
        for (IDataSyncFacet module : syncModules) {
            count += module.getDataFieldCount();
        }
        return count;
    }

    @Override
    public void markDataDirty() {
        isDirty = true;
    }

    @Override
    public boolean isDataDirty() {
        return isDirty;
    }

    @Override
    public void clearDataDirty() {
        isDirty = false;
    }

    /**
     * 添加需要数据同步的模块
     * @param module 数据同步模块
     */
    public void addSyncModule(IDataSyncFacet module) {
        syncModules.add(module);
    }

    /**
     * 移除数据同步模块
     * @param module 数据同步模块
     */
    public void removeSyncModule(IDataSyncFacet module) {
        syncModules.remove(module);
    }

    /**
     * 获取所有数据同步模块
     * @return 数据同步模块列表
     */
    public List<IDataSyncFacet> getSyncModules() {
        return syncModules;
    }
}